دسته بندی ها
21:06 1398/09/06

انتقال کاربر به مسیر خاص بعد از لاگین در Asp.net core

مشخصات سوال کننده :
کاربر : hamdola     امتیاز کاربر : 121     رتبه کاربر : 12
دسته بندی : Asp.net Core Asp.net Web Form Asp.net Mvc

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 3727
پاسخ دهنده : saedbfd 00:01 1398/09/07

برای این منظور یعنی بعد از اینکه کاربر لاگین کرد به یک مسیر مشخص هدایت بشه باید نقش های کاربر یا همون Role ها موقع لاگین کردن مشخص باشه. با توجه به اینکه پروژه شما از نوع asp.net core هست شما باید دقت داشته باشید که در فایل statrtup.cs و در متد configure از میان افزارهای زیر استفاده کرده باشید

 

app.UseAuthentication();
app.UseAuthorization();

 

هدایت کاربر به یک مسیر خاص بعد از لاگین

 

و همچنین به کاربران Role اختصاص داده شده باشه. با فرض اینکه همه این کارها به درستی انجام شده باشه می تونید توی اکشن متد Login دستورات زیر رو بنویسید 

 

  [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Login(LoginViewModel model)
        {
            if (ModelState.IsValid)
            {
                var result = await _signInManager.PasswordSignInAsync(model.username,
model.Password, true, lockoutOnFailure: true);

                if (result.Succeeded)
                {
                    var user = _userManager.Users.Where(item => item.username == model.username).Single();

                    //Success Login
                    var userRole = _userManager.GetRolesAsync(user).Result.Single();
                    return RedirectToLocal(userRole);
                }
                else if (!result.Succeeded)
                {
                    //اگر اطلاعات کاربر اشتباه بود
                    ModelState.AddModelError(string.Empty, "اطلاعات ورودی اشتباه است");
                    return View(model);
                }
            }
            return View(model);
        }

 

در قطعه کد بالا بعد از اینکه کاربر احراز هویت شد نقش کاربر رو بدست میاریم. دقیقا منظورم قطعه کد زیر هست

 

var userRole = _userManager.GetRolesAsync(user).Result.Single();

 

در کد بالا در متغیر userRole نقش کاربر رو نگهداری می کنیم. و در خط بعدی یک متد رو صدا می زنیم که ورودی این متد همون نقش کاربران هست، که با توجه به نقش کاربر کاربر رو به یک مسیر خاص که شما تعیین می کنید هدایت می کنه. این متد به صورت زیر هست

 

      private IActionResult RedirectToLocal(string RoleName)
        {
            if (RoleName == "admin")
            {
                return Redirect("/AdminPanel/adminHome");
            }
            else if (RoleName == "user")
            {
                return Redirect("/UserPanel/userHome");
            }
           
            return null;
        }

 

به این ترتیب شما می تونید بعد از لاگین موفق کاربر با توجه به نقش کاربر هدایت کنید به چه مسیری بره. ضمنا دقت کنید که برای هدایت کاربر به یک مسیر خاص بعد از لاگین از دستور Redirect استفاده شده که شما هم از این دستور استفاده کنید و مسیر مشخص شده هم به صورت Url نوشته شده.

کدهای بالا کاملا تست شده هستن و به درستی در پروژه کار می کنن. برای کسب اطلاعات بیشتر می تونید به این لینک هم مراجعه کنید.

ویرایش شده در پنج شنبه 7 آذر 1398 ساعت 00:02:20
به این پاسخ امتیاز بدهید    1
امتیاز: 1654 رتبه: 1
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود